package com.example;

import org.I0Itec.zkclient.IZkDataListener;
import org.I0Itec.zkclient.ZkClient;

import java.io.IOException;
import java.util.Properties;

public class Listener {
    // zk服务器地址信息
    public static final String serverstring = "linux121:2181,linux122:2181,linux123:2181";
    // 获取ZkClient对象
    private static ZkClient zkClient = new ZkClient(serverstring);
    // 保存数据库配置信息的节点路径
    private static String path = "/mysqlCfg";

    public static void monitor() throws IOException {
        zkClient.subscribeDataChanges(path, new IZkDataListener() {
            public void handleDataChange(String dataPath, Object data) throws Exception {
                System.out.println("zk中的数据库配置信息发生修改！尝试重新获取数据库连接池...");
                // 重新获取配置信息
                String cfg = zkClient.readData(dataPath, true);
                Properties pro = new Properties();
                Utils.loadDataToCfg(pro, cfg);
                System.out.println("重新获取配置成功");
                System.out.println(cfg);
                // 关闭旧的连接
                System.out.println("尝试重新连接");
                Startup.getConnection().close();
                // 创建新的连接
                Startup.setConnection(Utils.createDbPoolConnection());
                System.out.println("重新连接成功！！！");
                System.out.println("使用新的连接进行查询");
                new MySpringBootApplication().testSel();

            }
            public void handleDataDeleted(String dataPath) throws Exception {
                System.out.println("zk中的数据库配置信息已被删除！");
            }
        });
    }
}